home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library / Microsoft Programmer's Library (CD-ROM Database)(125-099-008)(Version 1.1a)(CDRM 162100)(1989).iso / SAMPCODE / OS2SDK11 / TK4 / OPENDLG / TOOL1.C < prev    next >
C/C++ Source or Header  |  1989-02-20  |  4KB  |  118 lines

  1. /*
  2.     TOOL1.C -- More commonly used library routines
  3.     Created by Microsoft Corporation, 1989
  4. */
  5.  
  6. #include "tool.h"
  7.  
  8. /***************************************************************************\
  9. * Merges sz[idMes1] and szText1 and displays a message box using
  10. * the wStyle. Use caption title provided by szText2.
  11. * Returns the answer from the message box (MBID_OK, MBID_CANCEL).
  12. \***************************************************************************/
  13.  
  14. int CALLBACK AlertBox (hwnd, idMes, lpszText1, lpszText2, idHelp, wStyle)
  15. HWND  hwnd;
  16. int   idMes;
  17. PSZ  lpszText1;
  18. PSZ  lpszText2;
  19. USHORT idHelp;
  20. USHORT wStyle;
  21.     {
  22.     char szMessage [MAXMESSAGELENGTH];
  23.  
  24.     MergeStrings((PSZ)vrgsz[idMes], lpszText1, (PSZ)szMessage);
  25.     if (idHelp != NULL)
  26.         wStyle |= MB_HELP;
  27.     return (WinMessageBox (HWND_DESKTOP, hwnd, (PSZ)szMessage, lpszText2,
  28.                            idHelp, wStyle));
  29.     }
  30.  
  31.  
  32. /***************************************************************************\
  33. * Scan szSrc for merge spec. If found, insert string szMerge at that point.
  34. * Then append rest of szSrc NOTE! Merge spec guaranteed to be two chars.
  35. * returns TRUE if it does a merge, false otherwise.
  36. \***************************************************************************/
  37.  
  38. BOOL CALLBACK MergeStrings(lpszSrc, lpszMerge, lpszDst)
  39. PSZ   lpszSrc;
  40. PSZ   lpszMerge;
  41. PSZ   lpszDst;
  42.     {
  43.     /* Find merge spec if there is one. */
  44.     while (*(unsigned far *)lpszSrc != *(unsigned *)vrgsz[IDS_MERGE1])
  45.         {
  46.         *lpszDst++ = *lpszSrc;
  47.         /* If we reach end of string before merge spec, just return. */
  48.         if (!*lpszSrc++)
  49.             return FALSE;
  50.         }
  51.  
  52.     /* If merge spec found, insert sz2 there. (check for null merge string */
  53.     if (lpszMerge)
  54.         {
  55.         while (*lpszMerge)
  56.             *lpszDst++ = *lpszMerge++;
  57.         }
  58.  
  59.     /* Jump over merge spec */
  60.     lpszSrc++,lpszSrc++;
  61.  
  62.     /* Now append rest of Src String */
  63.     while (*lpszDst++ = *lpszSrc++);
  64.     return TRUE;
  65.     }
  66.  
  67.  
  68.  
  69. /****************************************************************************\
  70. * This function invokes either an Open or Save dialog box.
  71. *     (lpdlf->rgbAction == DLG_OPENDLG)  -->  invoke Open dlgBox
  72. *     (lpdlf->rgbAction == DLG_SAVEDLG)  -->  invoke Save dlbBox
  73. *
  74. * Unless DLG_NOSAVE is specified, the file is opened and left open.
  75. *
  76. * Return values are:
  77. *     TDF_INVALID - Library error (internal error),
  78. *     TDF_ERRMEM  - Out of memory error
  79. *     TDF_NOOPEN  - User hits cancel
  80. *   specific to DLG_OPEN:
  81. *     TDF_NEWOPEN - Created new file
  82. *     TDF_OLDOPEN - Opened existing file
  83. *   specific to DLG_SAVE:
  84. *     TDF_NEWSAVE - user wants to save to a new file
  85. *     TDF_OLDSAVE - user wants to save over existing file
  86. *   specific to DLG_NOSAVE:
  87. *     TDF_NEWSAVE - user wants to save to a new file
  88. *     TDF_OLDSAVE - user wants to save over existing file
  89. \****************************************************************************/
  90.  
  91. int CALLBACK DlgFile(hwnd, pdlf)
  92. HWND  hwnd;
  93. PDLF pdlf;
  94.     {
  95.     /* create dialog box */
  96.     if (pdlf->rgbAction & DLG_SAVEDLG)
  97.         return WinDlgBox(HWND_DESKTOP, hwnd, DlgSaveAsWndProc, vhModule,
  98.                          IDD_SAVEAS, (PSZ)pdlf);
  99.     else
  100.         return WinDlgBox(HWND_DESKTOP, hwnd, DlgOpenWndProc, vhModule,
  101.                          IDD_OPEN, (PSZ)pdlf);
  102.     }
  103.  
  104. /**************************************************************************\
  105. * This function initializes the DLF structure
  106. \**************************************************************************/
  107. void CALLBACK SetupDLF(PDLF pdlf, int iAction, PHFILE phFile,
  108.                PSZ Extension, PSZ AppName, PSZ pszInTitle,
  109.                PSZ pszInInstructions ) {
  110.     pdlf->pszExt = Extension;
  111.     pdlf->rgbFlags = ATTRDIRLIST;
  112.     pdlf->phFile = phFile;
  113.     pdlf->pszAppName = AppName;
  114.     pdlf->rgbAction = iAction;
  115.     pdlf->pszTitle = pszInTitle;
  116.     pdlf->pszInstructions = pszInInstructions;
  117. }
  118.